#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 19-5-25 上午9:25
# @Author  : Jason
# @Site    : 
# @File    : views.py
# @Software: PyCharm
from flask import current_app, jsonify
from flask import g
from flask import render_template
from flask import request
from flask import session

from info import constants
from info import redis_store
from info.models import User, News, Category
from info.utils.common import user_login_data
from info.utils.response_code import RET
from . import index_blu


@index_blu.route('/news_list')
def news_list():
    """
    需求:获取首页新闻数据
    1.获取参数 :分类id,页数,每页多少条数据
    2.校验参数:
    3.查询数据
    """
   #1.获取参数
    cid =request.args.get("cid",'1')
    page =request.args.get('page','1')
    per_page=request.args.get('perpage','10')
    #2.校验参数
    try:
        cid = int(cid)
        page=int(page)
        per_page=int(per_page)

    except Exception as e:
        current_app.logger.erro(e)
        return jsonify(errno=RET.PARAMERR,errmsg='参数错误')

    filters=[News.status==0]
    # 3.查询数据
    #3.1查询的数据是否是最新的数据
    if cid !=1:
        #则添加响应的条件
        filters.append(News.category_id==cid)

    #3.2从数据中获取相应类的数据
    try:
        paginate =News.query.filter(*filters).order_by(News.create_time.desc()).paginate(page,per_page,False)
    except Exception as e:
        current_app.logger.erro(e)
        return  jsonify(errno=RET.DBERR,errmsg='数据查询错误')

    #3.3从获取的的数据中提取需要的当前页数据
    news_model_list =paginate.items #数据模型对象
    total_page =paginate.pages
    current_page =paginate.page
    #将模型对象列表转换成字典
    news_dict_li=[]
    for news in news_model_list:
        news_dict_li.append(news.to_basic_dict())

    data={
        "total_page":total_page,
        "current_page":current_page,
        "news_dict_li":news_dict_li
    }

    return jsonify(errno=RET.OK, errmsg="OK", data=data)

@index_blu.route('/')
@user_login_data
def index():
    """
    显示首页需求:如果用户已经登录,将当前用户的数据传到模板中,供模板使用
    """
    # 显示用户是否登录的逻辑
    user = g.user
    # 右侧的新闻排行的逻辑
    news_list=[]
    try:
       news_list = News.query.order_by(News.clicks.desc()).limit(constants.CLICK_RANK_MAX_NEWS)
    except Exception as e:
        current_app.logger.erro(e)
    # 定义一个空的的字典列表,里面装的是字典
    news_dict_li =[]
    # 遍历对象列表,将对象的字典添加到字典列表中
    for news in news_list:
        news_dict_li.append(news.to_basic_dict())


    #查询分类数据,通过模板的形式渲染出来
    categories =Category.query.all()#获取模型对象
   #输出[<Category 1>, <Category 2>, <Category 3>, <Category 4>, <Category 5>, <Category 6>]
    category_li =[]
    for category in categories:
        category_li.append(category.to_dict())



    data ={
        'user':user.to_dict() if user else None,
        'news_dict_li':news_dict_li,
        'category_li':category_li
    }

    return render_template('news/index.html',data=data)
    # 浏览器在打开浏览器的时候会默认的请求根路径+favicon.ico作为网站标签的小图标
    # send_static_file 是flask会去查找指定的静态文件所调用的方法

@index_blu.route('/favicon.ico')
def favicon():
    return  current_app.send_static_file('news/favicon.ico')

